<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    /*
    2，定义一个由整数组成的数组{1.txt, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5}，计算出数组中的奇数个数与偶数个数(0也算偶数)。并打印

3，在将题2中的数组中的非0元素移动一个新的数组中。

4，在题3的新数组中，求出数组的元素和、最大值与最小值，并输出打印

5，产生一个随机数，然后判断该随机数是否属于题3的数组中，如果是，请打印其位置

6，定义一个包含10元素的数组，对其进行赋值，使每个元素的值等于其下标，然后遍历数组，最后将数组倒置(即首尾交换)后再遍历打印

7，给10个老师打分，再找出最高分的那一个老师，将其名称与得分打印

8，定一个长度为30的整数数组，然后随机给每个元素赋值0~9，分别统计0~9这个10个数分别出现的次数。

9，定义一个整型数组，保存10个数据，利用程序完成将最大值保存在数组中第1个元素的操作

10.定义一个长度为20的对象数组，每个对象包含三个属性：学号number(int)，年级state(int)，成绩score(int)。 对象学号为1到20，年级和成绩都由随机数确定，打印出3年级(state值为3）的学生信息。并统计及格的学生数量。
    提示：生成随机数：Math.random()，返回值类型double;
    四舍五入取整：Math.round(double d)，返回值类型long。

13，定义一个int型的一维数组，包含10个元素，分别赋一些随机整数，然后求出所有元素的最大值，最小值，平均值，和值，并输出出来。
     */

    let arr = [1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5];
    let jishu = 0;
    let oushu = 0;
    arr.forEach(function (value) {
        if (value % 2 == 0) {
            jishu++;
        } else {
            oushu++;
        }
    });
    console.log("奇数：" + jishu);
    console.log("偶数：" + oushu);

    // let arrnew = [];
    // arr.forEach(function (value) {
    //     if (value != 0) {
    //         arrnew.push(value);
    //         // arrnew.unshift(value)
    //         // arrnew[arrnew.length] = value;
    //         // arrnew.splice(arrnew.length, 0, value);
    //     }
    // });
    let arrnew = arr.filter(function (value) {
        if (value != 0) {
            return value;
        }
    })
    console.log(arrnew);

    //所有元素都必须符合>5的条件就返回true
    console.log(arrnew.every(function (value) {
        return value > 5;
    }));
    //只要有一个元素符合>5的条件就返回true
    console.log(arrnew.some(function (value) {
        return value > 5;
    }));

    let arrnew1 = arrnew.map(function (value, index, array) {
        return value * 2;
    })
    console.log(arrnew1);

    let sum = 0;
    arrnew.forEach(function (value) {
        sum += value;
    });
    console.log("sum:" + sum);
    sum = arrnew.reduce(function (pre, cur, index, array) {
        console.log(pre);
        return pre - cur;
    }, 0);
    console.log("sum:" + sum);

    //从左到右搜索第一个5元素的位置，没有找到则返回-1.txt
    console.log(arrnew.indexOf(5));
    //从右到左搜索第一个5元素的位置
    console.log(arrnew.lastIndexOf(5));
    console.log(arrnew.lastIndexOf(10));
    let haha = ["a", "b"];
    //concat返回新数组，不会影响原来的数组，跟push有些类似
    // console.log(arrnew.concat(haha));
    //slice(start?: number, end?: number): T[];start和end都支持负数
    //[start, end)
    console.log(arrnew.slice(0, 3));
    console.log(arrnew.slice(-6, -3));//了解

    console.log(arrnew.reverse());
    // arrnew.push("a");
    console.log(arrnew.sort(function (a, b) {
        return b - a;
    }));

    console.log(arrnew.toString());
    console.log(arrnew.toLocaleString());
    console.log(arrnew.valueOf());
    //join(separator?: string): string;
    console.log(arrnew.join("-"));

    /**
     * 对数组求和
     * @param array
     */
    function sum1(array) {
        if (Array.isArray(array)) {
            console.log(array.length);
            console.log("array 参数是数组");

        } else {
            console.log("array 参数不是数组");
        }
    }

    sum1();
    sum1(arrnew);

    function max(array) {
        if (!Array.isArray(array)) {
            //如果没有捕获异常的代码，就会中断程序
            throw new Error("array 参数不是一个数组");
        }

        let max = array[0];
        array.forEach(function (value) {
            if (max < value) {
                max = value;
            }
        });
        console.log("最大值为：" + max);
    }

    max(arrnew);
    console.log(Math.max(...arrnew));
    console.log(Math.max(1, 3, 5, 7, 9));
    console.log(Math.max.apply(this, arrnew));//apply方法是用来调用函数的，且可以指定this对象的值

    //产生随机数
    // Math.random();[0, 1.txt)的浮点型
    let r = Math.floor(Math.random() * 10 + 1);//删除小数位
    // Math.round();//四舍五入
    console.log(r + "：在arrnew数组的哪个位置?" + arrnew.indexOf(r));
    console.log(r + "：是否存在于arrnew数组中?" + (arrnew.indexOf(r) != -1));
    console.log(r + "：是否存在于arrnew数组中?" + arrnew.includes(r));
    console.log(r + "：是否存在于arrnew数组中?" + arrnew.some((value) => value == r));

    let ts = [
        {name: "A", score: Math.floor(Math.random() * 100 + 1)},
        {name: "B", score: Math.floor(Math.random() * 100 + 1)},
        {name: "C", score: Math.floor(Math.random() * 100 + 1)},
    ];
    console.log(ts);
    let maxValue = ts[0].score;
    ts.forEach(function (value, index, array) {
        if (maxValue < value.score) {
            maxValue = value.score;
        }
    });
    console.log(ts.find(function (value) {
        if (value.score == maxValue) {
            return value;
        }
    }));

    console.log(arrnew);
    for (let i = 0, j = arrnew.length - 1; i < arrnew.length / 2, j > arrnew.length / 2; i++,j--) {
        // let temp = arrnew[i];
        // arrnew[i] = arrnew[j];
        // arrnew[j] = temp;
        arrnew[i] = arrnew[i] ^ arrnew[j];// 0101  0011   0110
        arrnew[j] = arrnew[i] ^ arrnew[j];// 0110  0011   0101
        arrnew[i] = arrnew[i] ^ arrnew[j];// 0110  0101   0011
        // arrnew[i] = arrnew[i] + arrnew[j];
        // arrnew[j] = arrnew[i] - arrnew[j];
        // arrnew[i] = arrnew[i] - arrnew[j];
    }
    console.log(arrnew);

    /*
    函数传参
        原始数据类型：6个
            undefined
            null
            Number
            String
            Boolean
            Symbol
            值传递
        引用数据类型
            Object
                Array
                Map
                Set
                Date
                Math
            地址传递，将地址当成一个值传过
     */

    function add(a, b) {
        a = a + b;
    }

    function t1(obj) {
        obj.a = obj.a + obj.b;
    }

    let a  = 1, b = 2;
    add(a, b);

    let obj = {
        a: 3,
        b: 4
    }
    t1(obj);

    console.log(a, b, obj);
</script>
</body>
</html>